﻿#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//#include<math.h>
//#include<stdlib.h>
//typedef long long ll;
//#define N 100000000
//ll sum[N];//这个数组用于储存数列的前缀和也就是下标为最大的
////那个等差数列的位数，而数组里面储存的也就是从0到这个等差数列的前
////n项和，因为前n项和可以直接使用公式（（n+1）*（n））/2求出来
//int main()
//{
//	sum[0] = 0;
//	for (int i = 1; i < N; i++)
//	{
//		ll loc = ((i + 1) * (i)) / 2;//这里的i也是等差数列的项数
//		//即求出这个只有i项的等差数列和为多少
//		sum[i] = sum[i - 1] + loc;//那么这样我们就能求出从1开始到项数
//		//i的全和（即计算了多个等差数列再求和）
//	}
//	int t = 0;
//	scanf("%d", &t);//输入要求几组数据
//	while (t--)
//	{
//		ll res = 0;
//		ll begin, end;
//		scanf("%lld %lld", &begin, &end);
//		ll lenend = (ll)((sqrt(1 + 8.0 * end) - 1) / 2);//经过此计算就能够知道end所在的等差数列有多少项/若end不再一个满等差数列
//		//就会得到end前面的满等差数列项数
//		res += sum[lenend];//将前缀和加入答案res中
//		//如果end不是满等差数列我们还需要加上最后丢失的那一部分
//		ll t1 = end - sum[lenend];
//		res += ((t1 + 1) * (t1) / 2);//将剩余的数加上
//		begin--;
//		ll lenbegin = (ll)((sqrt(1 + 8.0 * begin) - 1) / 2);//求出begin所在的等差数列有多少项，或是begin前面的等差数列有多少项
//		res -= sum[lenbegin];
//		ll t2 = begin - sum[lenbegin];
//		res -= ((t2 + 1) * (t1) / 2);
//		printf("%lld", res);
//	}
//	return 0;
//}
//#include <stdio.h>
//#include <stdlib.h>
//#define long long long
//#define maxn 1414215
////每个小区间由a=1，d=1的等差数列，且区间的长度也能构成等差数列
////l,r<=10^12，即n*(n+1)/4<=10^12,n=1414214,最多由1414214个小区间组成，满足任意l,r 都能落在里面
////这意味着虽然我们不能直接查询某一位置的前缀和，但可以通过这些小区间来定位和计算某一位置的前缀和
////第i个区间的元素个数为i。
////定义 a[i] 表示前 i 个小区间的元素个数（1 ~ n 的和）。则有：a[i]=a[i−1]+i 
////定义 s[i] 表示前 i 个小区间的和。则有：s[i]=s[i−1]+a[i]
////对于数列中任意位置 i ，一定存在一个最大的 j 满足 a[j]≤i ，这表示第 i 个数落在第 j+1 区间内
////对于数列中任意位置i，当它落在第 j+1 个区间，它是该区间第 k 个数，则它在数列中的前缀和为：s[j]+a[k]，其中 k=i−a[j]。
//long a[maxn], s[maxn];
////用二分法求小于等于i的最大数的下标，满足a[j]≤i，最后返回i的前缀和
//long preSum(long i)
//{
//    int l = 0, r = maxn, mid;
//    while (l < r)
//    {
//        mid = (l + r + 1) / 2;
//        if (a[mid] > i) 
//            r = mid - 1;
//        else 
//            l = mid;
//    }
//    return s[l] + a[i - a[l]];
//}
//
//int main()
//{
//    for (int i = 1; i < maxn; i++)
//    {
//        a[i] = a[i - 1] + i;
//        s[i] = s[i - 1] + a[i];
//    }
//    int t;
//    scanf("%d", &t);
//    while (t--)
//    {
//        long l, r;
//        scanf("%lld%lld", &l, &r);
//        printf("%lld\n", preSum(r) - preSum(l - 1));
//    }
//    return 0;
//}
//题目两个字符数组S1和S2寻找S1在S中出现的次数
#include <stdio.h>
#include <stdlib.h>
#define N 10000000
int main(int argc, char* argv[])
{
    int count = 0;
    int flag = 0;
    char arrS1[N];
    char arrS2[N];
    fgets(arrS1, N, stdin);  // 读取S1
    fgets(arrS2, N, stdin);  // 读取S2
    int lenS1 = strlen(arrS1);//获得S1长度
    int lenS2 = strlen(arrS2);//获得S2长度
    if (lenS2 < lenS1)//如果S2长度小于S1不可能出现S2的字串为S1
    {
        printf("%d", count);
        return 0;
    }
    arrS1[lenS1 - 1] = '\0';//将读取到的回车改为\0
    arrS2[lenS2 - 1] = '\0';
    lenS1 = strlen(arrS1);
    lenS2 = strlen(arrS2);
    for (int i = 0; i <= lenS2 - lenS1; i++)//遍历S2减去一个S1是为了防止越界
    {
        flag = 0;
        for (int j = 0; j < lenS1; j++)
        {
            if (arrS2[i + j] == arrS1[j])
            {
                flag++;
            }
            else
            {
                break;
            }
        }
        if (flag == lenS1)
        {
            count++;
        }
    }
    printf("%d ", count);
}